package com.candy.exp;

import java.io.File;
import java.io.InputStream;

/**
 * 异常处理
 * 1、主动捕获
 * try{可能会出现问题的语句块
 * }catch(异常类型 异常名字){
 *     出现该异常情况下的处理，可以有多个catch构成
 * }finally{无论是否发生异常都会被执行的代码}
 */
public class Test01 {
    public static void main(String[] args) {
      try{
          test04();
      }catch (NullPointerException e){
          System.out.println("出现了空指针");
      }
    }

    /**
     * 手动制造异常，一般用于方法之间的通讯处理
     */
    public static void test04() {
        int num_01=6;
        if(num_01==6){
            throw new NullPointerException();
        }
    }


    public static void test03() {
        try{
            test02();
        }catch (ClassNotFoundException e){
            System.out.println("处理ClassNotFoundException的异常");
        }
    }

    /**
     * throws机制，将异常向上抛出，由上层调用者进行处理
     * @throws ClassNotFoundException
     */
    public static void test02() throws ClassNotFoundException {
        Class.forName("");
    }

    /**
     * 异常手动捕获处理
     */
    public static void test01() {
        try{
            int num_01=5;
            int num_02=2;
//        非编译性异常（运行时异常）
             System.out.println(num_01/num_02);//ArithmeticException: / by zero
//       编译性异常（非运行时异常）
        Class.forName("");
        }catch (ArithmeticException e){
            System.out.println("此处发生了ArithmeticException异常");
        }catch (NullPointerException e){
            System.out.println("此处发生了NullPointerException异常");
        }catch (Exception e){
            System.out.println("代码发生了异常");
        }finally {
            System.out.println("我是代码无论是否发生异常都会执行的代码块");
        }

    }
}
